package br.com.upis.sispat.entity;

import java.io.Serializable;
import java.util.List;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.Table;
import javax.persistence.Transient;

import org.hibernate.annotations.LazyCollection;
import org.hibernate.annotations.LazyCollectionOption;

import br.com.upis.sispat.enums.Perfil;
import br.com.upis.sispat.enums.StatusAtivo;

@Entity
@Table(name = "tb_usuario", schema = "db_sispat")
public class Usuario implements Serializable {

	private static final long serialVersionUID = -7026825738144869861L;

	public Usuario() {
	}

	@Id
	@GeneratedValue(strategy = GenerationType.IDENTITY)
	@Column(name = "id_usuario", nullable = false, unique = true)
	private Long codigo;

	@Column(name = "nome_usuario", nullable = false, length = 70)
	private String nomeUsuario;

	@Column(name = "login", nullable = false, length = 15)
	private String login;

	@Column(name = "senha", nullable = false, length = 15)
	private String senha;

	@Column(name = "endereco", nullable = false, length = 2)
	private String endereco;

	@Column(name = "id_acesso", nullable = false, length = 1)
	private Integer idAcesso;

	@Column(name = "status", nullable = false, length = 1)
	private String status;

	@Column(name = "senha_gerada", nullable = false, length = 1)
	private String senhaGerada;
	
	@Transient
	private Perfil perfil;
	
	@ManyToOne(cascade = CascadeType.PERSIST)
	@JoinColumn(name = "id_setor", referencedColumnName = "id_setor")
	private Setor setor;
	
	@OneToMany(mappedBy = "pk.usuario", targetEntity = AlocacaoPatrimonio.class, cascade = CascadeType.REFRESH)
	@LazyCollection(LazyCollectionOption.FALSE)
	private List<AlocacaoPatrimonio> listaAlocacoes;
	
	public Long getCodigo() {
		return codigo;
	}

	public void setCodigo(Long codigo) {
		this.codigo = codigo;
	}

	public String getNomeUsuario() {
		return nomeUsuario;
	}

	public void setNomeUsuario(String nomeUsuario) {
		this.nomeUsuario = nomeUsuario;
	}

	public String getLogin() {
		return login;
	}

	public void setLogin(String login) {
		this.login = login;
	}

	public String getSenha() {
		return senha;
	}

	public void setSenha(String senha) {
		this.senha = senha;
	}

	public String getEndereco() {
		return endereco;
	}

	public void setEndereco(String endereco) {
		this.endereco = endereco;
	}

	public Integer getIdAcesso() {
		return idAcesso;
	}

	public void setIdAcesso(Integer idAcesso) {
		this.idAcesso = idAcesso;
	}

	public String getStatus() {
		return status;
	}

	public void setStatus(String status) {
		this.status = status;
	}

	public String getSenhaGerada() {
		return senhaGerada;
	}

	public void setSenhaGerada(String senhaGerada) {
		this.senhaGerada = senhaGerada;
	}

	public Perfil getPerfil() {
		return perfil;
	}

	public void setPerfil(Perfil perfil) {
		this.perfil = perfil;
	}
	
	@Transient
	public String getDescricaoPerfil() {
		return Perfil.getDescricaoPerfil(getIdAcesso());
	}
	
	public String getDescricaoStatus(){
		return StatusAtivo.getStatusAtivoBySigla(getStatus()).getDescricao();
	}

	public List<AlocacaoPatrimonio> getListaAlocacoes() {
		return listaAlocacoes;
	}

	public void setListaAlocacoes(List<AlocacaoPatrimonio> listaAlocacoes) {
		this.listaAlocacoes = listaAlocacoes;
	}

	public Setor getSetor() {
		if(setor==null){
			setor = new Setor();
		}
		return setor;
	}

	public void setSetor(Setor setor) {
		this.setor = setor;
	}
}
